﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace MX.Core.Log
{
    /// <summary>
    /// 日志接口
    /// </summary>
    public interface ILogger
    {
        /// <summary>
        /// 记录提示信息日志
        /// </summary>
        /// <param name="message">日志消息</param>
        void Info(string message);
        /// <summary>
        /// 记录提示信息日志
        /// </summary>
        /// <param name="message">日志消息，可以带“{x}”之类的格式符标记，代表附加数据</param>
        /// <param name="data">日志消息里的附加数据</param>
        void Info(string message, params object[] data);
        /// <summary>
        /// 记录提示信息日志
        /// </summary>
        /// <param name="ex">错误异常</param>
        /// <param name="message">日志消息</param>
        void Info(Exception ex, string message);
        /// <summary>
        /// 记录提示信息日志
        /// </summary>
        /// <param name="ex">错误异常</param>
        /// <param name="message">日志消息，可以带“{x}”之类的格式符标记，代表附加数据</param>
        /// <param name="data">日志消息里的附加数据</param>
        void Info(Exception ex, string message, params object[] data);

        /// <summary>
        /// 记录调试日志
        /// </summary>
        /// <param name="message">日志消息</param>
        void Debug(string message);
        /// <summary>
        /// 记录调试日志
        /// </summary>
        /// <param name="message">日志消息，可以带“{x}”之类的格式符标记，代表附加数据</param>
        /// <param name="data">日志消息里的附加数据</param>
        void Debug(string message, params object[] data);
        /// <summary>
        /// 记录调试日志
        /// </summary>
        /// <param name="ex">错误异常</param>
        /// <param name="message">日志消息</param>
        void Debug(Exception ex, string message);
        /// <summary>
        /// 记录提示信息日志
        /// </summary>
        /// <param name="ex">错误异常</param>
        /// <param name="message">日志消息，可以带“{x}”之类的格式符标记，代表附加数据</param>
        /// <param name="data">日志消息里的附加数据</param>
        void Debug(Exception ex, string message, params object[] data);

        /// <summary>
        /// 记录错误日志
        /// </summary>
        /// <param name="message">日志消息</param>
        void Error(string message);
        /// <summary>
        /// 记录错误日志
        /// </summary>
        /// <param name="message">日志消息，可以带“{x}”之类的格式符标记，代表附加数据</param>
        /// <param name="data">日志消息里的附加数据</param>
        void Error(string message, params object[] data);
        /// <summary>
        /// 记录错误日志
        /// </summary>
        /// <param name="ex">错误异常</param>
        /// <param name="message">日志消息</param>
        void Error(Exception ex, string message);
        /// <summary>
        /// 记录错误日志
        /// </summary>
        /// <param name="ex">错误异常</param>
        /// <param name="message">日志消息，可以带“{x}”之类的格式符标记，代表附加数据</param>
        /// <param name="data">日志消息里的附加数据</param>
        void Error(Exception ex, string message, params object[] data);

        /// <summary>
        /// 记录警告日志
        /// </summary>
        /// <param name="message">日志消息</param>
        void Warn(string message);
        /// <summary>
        /// 记录警告日志
        /// </summary>
        /// <param name="message">日志消息，可以带“{x}”之类的格式符标记，代表附加数据</param>
        /// <param name="data">日志消息里的附加数据</param>
        void Warn(string message, params object[] data);
        /// <summary>
        /// 记录警告日志
        /// </summary>
        /// <param name="ex">错误异常</param>
        /// <param name="message">日志消息</param>
        void Warn(Exception ex, string message);
        /// <summary>
        /// 记录警告日志
        /// </summary>
        /// <param name="ex">错误异常</param>
        /// <param name="message">日志消息，可以带“{x}”之类的格式符标记，代表附加数据</param>
        /// <param name="data">日志消息里的附加数据</param>
        void Warn(Exception ex, string message, params object[] data);

        /// <summary>
        /// 记录致命错误日志
        /// </summary>
        /// <param name="message">日志消息</param>
        void Fatal(string message);
        /// <summary>
        /// 记录致命错误日志
        /// </summary>
        /// <param name="message">日志消息，可以带“{x}”之类的格式符标记，代表附加数据</param>
        /// <param name="data">日志消息里的附加数据</param>
        void Fatal(string message, params object[] data);
        /// <summary>
        /// 记录致命错误日志
        /// </summary>
        /// <param name="ex">错误异常</param>
        /// <param name="message">日志消息</param>
        void Fatal(Exception ex, string message);
        /// <summary>
        /// 记录致命错误日志
        /// </summary>
        /// <param name="ex">错误异常</param>
        /// <param name="message">日志消息，可以带“{x}”之类的格式符标记，代表附加数据</param>
        /// <param name="data">日志消息里的附加数据</param>
        void Fatal(Exception ex, string message, params object[] data);
    }
}
